#include "mlp_layer.h"
#ifndef MLP_LAYER_PRIVATE_H
#define MLP_LAYER_PRIVATE_H



typedef void (*ForwardType)(const MLPLayerPtr layer_ptr, const double x[], double y[]);
typedef void (*BackwardType) (MLPLayerPtr layer_ptr, const double delta_y[], double delta_x[]);
typedef void (*OptimizerStep)(MLPLayerPtr layer_ptr, double lr);


typedef struct LayerType{
    int input_dim;
    int output_dim;
    double *weights;
    double *bias;
    double *delta_weights;
    double *delta_bias;
    double *input;
    double *z_value; // z_val = input * weights + b
    
    ActivateType h_activate;
    DiffActivateType h_activate_diff;
    ForwardType h_forward;
    BackwardType h_backward;
    OptimizerStep h_optim_step;

} MLPLayer;

#endif
